/** @file
  Defines Opal HII form ids, structures and values.

Copyright (c) 2016 - 2018, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License
which accompanies this distribution.  The full text of the license may be found at
http://opensource.org/licenses/bsd-license.php

THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.

**/


#ifndef _OPAL_HII_FORM_VALUES_H_
#define _OPAL_HII_FORM_VALUES_H_

// ID's for various forms that will be used by HII
#define FORMID_VALUE_MAIN_MENU                             0x01
#define FORMID_VALUE_DISK_INFO_FORM_MAIN                   0x02

#pragma pack(1)
typedef struct {
  UINT16    Lock:1;
  UINT16    Unlock:1;
  UINT16    SetAdminPwd:1;
  UINT16    SetUserPwd:1;
  UINT16    SecureErase:1;
  UINT16    Revert:1;
  UINT16    PsidRevert:1;
  UINT16    DisableUser:1;
  UINT16    DisableFeature:1;
  UINT16    EnableFeature:1;
  UINT16    Reserved:5;
  UINT16    KeepUserData:1;
} OPAL_REQUEST;

typedef struct {
  UINT8           NumDisks;
  UINT8           SelectedDiskIndex;
  UINT16          SelectedDiskAvailableActions;
  UINT16          SupportedDisks;
  BOOLEAN         KeepUserDataForced;
  OPAL_REQUEST    OpalRequest;
  UINT8           EnableBlockSid;
} OPAL_HII_CONFIGURATION;

#pragma pack()

/* Action Flags */
#define HII_ACTION_NONE                                        0x0000
#define HII_ACTION_LOCK                                        0x0001
#define HII_ACTION_UNLOCK                                      0x0002
#define HII_ACTION_SET_ADMIN_PWD                               0x0004
#define HII_ACTION_SET_USER_PWD                                0x0008
#define HII_ACTION_SECURE_ERASE                                0x0010
#define HII_ACTION_REVERT                                      0x0020
#define HII_ACTION_PSID_REVERT                                 0x0040
#define HII_ACTION_DISABLE_USER                                0x0080
#define HII_ACTION_DISABLE_FEATURE                             0x0100
#define HII_ACTION_ENABLE_FEATURE                              0x0200

/* Number of bits allocated for each part of a unique key for an HII_ITEM
 * all bits together must be <= 16 (EFI_QUESTION_ID is UINT16)
 * 1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1
 * |   |-----------------------|   |---------------------------|
 * FLG INDEX                       ID
 */
#define HII_KEY_ID_BITS                                     8
#define HII_KEY_INDEX_BITS                                  7
#define HII_KEY_FLAG_BITS                                   1

#define HII_KEY_FLAG                                        0x8000 // bit 15 (zero based)

/***********/
/* Key IDs */
/***********/

#define HII_KEY_ID_GOTO_DISK_INFO                       1

#define HII_KEY_ID_VAR_SUPPORTED_DISKS                  2
#define HII_KEY_ID_VAR_SELECTED_DISK_AVAILABLE_ACTIONS  3

#define HII_KEY_ID_BLOCKSID                             4
#define HII_KEY_ID_SET_ADMIN_PWD                        5
#define HII_KEY_ID_SET_USER_PWD                         6
#define HII_KEY_ID_SECURE_ERASE                         7
#define HII_KEY_ID_REVERT                               8
#define HII_KEY_ID_KEEP_USER_DATA                       9
#define HII_KEY_ID_PSID_REVERT                          0xA
#define HII_KEY_ID_DISABLE_USER                         0xB
#define HII_KEY_ID_ENABLE_FEATURE                       0xC

#define HII_KEY_ID_MAX                                  0xC // !!Update each time a new ID is added!!

#define HII_KEY_WITH_INDEX(id, index) \
    ( \
        HII_KEY_FLAG | \
        (id) | \
        ((index) << HII_KEY_ID_BITS) \
    )

#define HII_KEY(id) HII_KEY_WITH_INDEX(id, 0)

#define PACKAGE_LIST_GUID { 0xf0308176, 0x9058, 0x4153, { 0x93, 0x3d, 0xda, 0x2f, 0xdc, 0xc8, 0x3e, 0x44 } }

/* {410483CF-F4F9-4ece-848A-1958FD31CEB7} */
#define SETUP_FORMSET_GUID { 0x410483cf, 0xf4f9, 0x4ece, { 0x84, 0x8a, 0x19, 0x58, 0xfd, 0x31, 0xce, 0xb7 } }

// {BBF1ACD2-28D8-44ea-A291-58A237FEDF1A}
#define SETUP_VARIABLE_GUID { 0xbbf1acd2, 0x28d8, 0x44ea, { 0xa2, 0x91, 0x58, 0xa2, 0x37, 0xfe, 0xdf, 0x1a } }

#endif //_HII_FORM_VALUES_H_

